var test =new Test(1,2);
test.do();
// 定义名为 todo-item 的新组件
Vue.component('todo-item', {
    template: '<li>这是个待办项</li>'
});

var app = new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue!'
    }
});

var app2 = new Vue({
    el: '#app-2',
    data: {
        message: '页面加载于 ' + new Date().toLocaleString()
    }
});

var app3 = new Vue({
    el: '#app-3',
    data: {
        seen: true
    }
});

var app4 = new Vue({
    el: '#app-4',
    data: {
        todos: [
            { text: '学习 JavaScript' },
            { text: '学习 Vue' },
            { text: '整个牛项目' }
        ]
    }
});

var app5 = new Vue({
    el: '#app-5',
    data: {
        message: 'Hello Vue.js!'
    },
    methods: {
        reverseMessage: function () {
            this.message = this.message.split('').reverse().join('')
        }
    }
});

var app6 = new Vue({
    el: '#app-6',
    data: {
        message: 'Hello Vue!'
    }
});

//组件是一个【标签】--》组件标签有【属性】--》【组件属性】可绑定vue.data中的【变量】--》组件【模板】中引用属性，获取变量--》在组件部署中，不用写内容体，只需绑定变量到属性即可
//组件是属性是变量参数接收者。模板是变量参数的使用者
//props:函参。template:方法体
Vue.component('todo-item', {
    props: ['todo'],
    template: '<li>{{ todo.text }}</li>'
});
var app7 = new Vue({
    el: '#app-7',
    data: {
        groceryList: [
            { id: 0, text: '蔬菜' },
            { id: 1, text: '奶酪' },
            { id: 2, text: '随便其他什么人吃的东西' }
        ],
        // rawHtml:'<span>raw HTML</span>'
        customerText:'<span> a raw html tag </span>',
        btnDisabled:false,
        firstName:'tang',
        lastName:'yong'
    },
    computed: {
        // 计算属性的 getter
        reversedCustomerText: function () {
            // `this` 指向 vm 实例
            return this.customerText.split('').reverse().join('')
        },
        fullName: {
            // getter
            get: function () {
                return this.firstName + ' ' + this.lastName;
            },
            // setter 在调试中运行app7.fullName = 'John Doe'时，会调用setter刷新
            set: function (newValue) {
                var names = newValue.split(' ');
                this.firstName = names[0];
                this.lastName = names[names.length - 1];
            }
        }
    },
    watch:
        {
            firstName:function () {
                this.doSomething();
            }
        },
    methods:
        {
            doSomething:function () {
                alert('ok');
            }
        }
});


//----------------------------------------------------
// 我们的数据对象
var data = { a: 1 };
// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
    data: data
});

console.log(vm.$data);
// 他们引用相同的对象！
console.log(vm.a === data.a); // => true
// 设置属性也会影响到原始数据
vm.a = 2;
console.log(data.a); // => 2
// ... 反之亦然
data.a = 3;
console.log(vm.a); // => 3
//----------------------------------------------

var data_01 = { a: 1 };
var vm_01 = new Vue({
    el: '#example',
    data: data_01
});
console.log(vm_01.$data === data_01);
 // => true
console.log(vm_01.$el === document.getElementById('example')); // => true
console.log(vm_01.$el); // => true

// $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {
    alert('vm.a改变');
    // 这个回调将在 `vm.a` 改变后调用
});
//---------------------------------------
new Vue({
    data: {
        a: 1
    },
    created: function () {
        // `this` 指向 vm 实例
        console.log('a is: ' + this.a)
    }
});

var watchExampleVM = new Vue({
        el: '#watch-example',
        data: {
            question: '',
            answer: '请先提一个问题 ! '
        },
        watch: {
            // 观察对象 question变量，当它发生改变，这个函数就会运行
            question: function (newQuestion) {
                this.answer = '等待你输入完成...';
                this.getAnswerSimple();
            }
        },
        methods: {
            // `_.debounce` 是一个通过 Lodash 限制操作频率的函数。
            // 在这个例子中，我们希望限制访问 yesno.wtf/api 的频率
            // AJAX 请求直到用户输入完毕才会发出。想要了解更多关于
            // `_.debounce` 函数 (及其近亲 `_.throttle`) 的知识，
            // 请参考：https://lodash.com/docs#debounce
            getAnswer: _.debounce(
                function () {
                    if (this.question.indexOf('?') === -1) {
                        this.answer = '问题通常包含一个问号：）';
                        return;
                    }
                    this.answer = '正在思考...';
                    var vm = this;
                    axios.get('https://yesno.wtf/api')
                        .then(function (response) {
                            vm.answer = _.capitalize(response.data.answer)
                        })
                        .catch(function (error) {
                            vm.answer = 'Error! Could not reach the API. ' + error
                        })
                },
                // 这是我们为判定用户停止输入等待的毫秒数
                500
            ),
            getAnswerSimple: _.debounce(
                function () {
                    if (this.question.indexOf('?') === -1) {
                        this.answer = '问题通常包含一个问号：）';
                        return;
                    }
                    this.answer = '你提的问题是:'+this.question;

                },
                // 这是我们为判定用户停止输入等待的毫秒数
                500
            )
        }
    });
